接下來的幾天,會介紹一些跟DevOps有關的images
依據jenkins官方文件
https://jenkins.io/doc/pipeline/tour/getting-started/
jenkins要裝java 8(JRE或JDK)
裝好後只要執行 java -jar jenkins.war --httpPort=8080 即可,相當簡單
不過個人很害怕要依賴JRE才能執行的軟體,
因為以前在Mac底下裝Eclipse IDE 等軟體有不好的經驗
好家在有docker版本,至少不用管各container裡的java版本
只是要多學怎麼把container裡的檔案備份出來
參考官網安裝文件:
https://github.com/jenkinsci/docker
$ docker pull jenkins/jenkins:latest # 下載image
$ docker run -d --name MyJenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:latest
--name : 幫container取名字,一定要取,否則以後操作container很麻煩
-v: 建立 KENKINS_HOME 環境變數,當作jenkins的工作目錄(在container裡)
剛docker run,開瀏覽器卡好久,睡一覺醒來才到Getting Started頁面
docker exec -it MyJenkins /bin/bash # 進到container裡
jenkins@fc344ed3d693:/$ cat /var/jenkins_home/secrets/initialAdminPassword
2fe50103078641d78181d0b79072a49b # 這一組在host第1次連localhost:8080時要key的
$ cat /var/jenkins_home/secrets/initialAdminPassword
# 也可以在host對container下shell指令
$ docker exec MyJenkins cat /var/jenkins_home/secrets/initialAdminPassword
afa0d430bd8f46fbba43f24adbf2acf9
docker cp $ID:/var/jenkins_home
mkdir data
cat > data/log.properties <<EOF
handlers=java.util.logging.ConsoleHandler
jenkins.level=FINEST
java.util.logging.ConsoleHandler.level=FINEST
EOF
docker run --name myjenkins -p 8080:8080 -p 50000:50000 --env JAVA_OPTS="-Djava.util.logging.config.file=/var/jenkins_home/log.properties" -v `pwd`/data:/var/jenkins_home jenkins/jenkins:lts
============================我是分隔線===============================
不要一直拼指令,來用看看jenkins,充充篇幅~
我在udemy買了一些jenkins的課程,但一直都沒看,現在來邊玩邊看,會主要參考這個課程:
Master Jenkins CI For DevOps and Developers
剛好EarthFend大大有寫此課程筆記,寫得比較完整,大家也可以參考喔
https://medium.com/@samtsai15
這邊我在vm ubuntu裡跑的jenkins遇到問題,
所以是在host macOS底下跑docker的喔
這門課分幾個章節,如果看完覺得不錯,再去購買課程
Getting Started
Customize Jenkins(選plugins,作為老牌軟體,聽說plugin是最完整的)
選select plugins to install,然後全選@@~
以後可以在Manage Jenkins/Manage Plugins變更
好像主流的開發語言都支援呢~好興奮
開始安裝
建個Job - create new jobs
Enter an item name
first-Job # 可以用-
General
Discard old builds # 可以限制記錄的build history保留數量
Disable this project # 暫時不要build,尤其專案還沒寫到可以跑的時候,或維護工作、重構時用
Source Code Management
因為沒有checkout任何source code,所以暫時選none
以後設定好git、github plugin之後,會出現Git選項
Use SSH: yourAccount@github.com:xxxx/yyyy-project.git
Use HTTPS: https://github.com/xxxx/yyyy-project.git
在terminal試看看
$ git clone yourAccount@github.com:xxxx/yyyy-project.git
$ git commit --allow-empty # 隨便commit一下,去觸發trigger jenkins
$ git push
回到Jenkins的Project,Git Polling Log看有沒有動靜~ 如果有,跟GitHub的作動就成功了~
如果想手動build時用
* * * * * 每個星星用TAB或空白鍵格開
分(0-59)、時(0-23)、日(1-31)、月(1-12)、星期幾(日=0、一=1、二=2、三=3、四=4、五=5、六=6)
*代表所有都有效
2-10代表值2~10
A,B,C列舉多個值
例如:
0 12,18,0 * * * # 每天的12點、18點、半夜12點(環點 = =)
定義build steps,有3個選項:
1、Execute Windows batch command:給Windows用的
2、Execute shell:給shell用的,例如:
echo "hello jenkins"
3、Invoke top-level Maven targets
Maven:自動化編譯工具, 要在Manage Jenkins/Global Tool Configuration設定Maven的路徑
就像「博士後研究」?老闆口試先讓你過,後面還是付出一些
build後可以幹麻呢?寄個email「通知」呀、把編譯後的檔案打包、
存檔後就會建好「first-Job」的Project/Job了
1個Project -> n個Jobs (要新增Job用New Item),不用記,實際玩就對了~
在first-Job最後面有個執行的icon,按下去會進排程,Build History在左下角
藍球:代表「成功」,點進去->選Console Output->會看到「hello jenkins」
好有成就感,媽,我成功了!! 首先,我要感謝我的老師,還有支持我的家人…
冷…
Maven-based Jenkins job
1、設定Path environment vairable = bin的目錄,讓OS知道maven執行檔在哪裡
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
# 把bin目錄加到PATH
export PATH=/opt/apache-maven-3.5.4/bin:$PATH
或者
$ cd apache-maven-3.5.4/bin
$ pwd
/Users/user/Downloads/apache-maven-3.5.4/bin
$ vim ~/.bash_profile # 每個user的家目錄,都會有.bash_profile,環境變數統一寫在這邊
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.xxx/Contents/Home
export PATH=/opt/apache-maven-3.5.4/bin:$PATH
$ source ~/.bash_profile # 立即生效
2、大概就是下載bin檔,跑./mvn -v,然後會出現安裝結果
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T20:33:14+02:00)
Maven home: /opt/apache-maven-3.5.4
Java version: 1.8.0_45, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.8.5", arch: "x86_64", family: "mac"
###回到Jenkins設定Java、Git、Maven
Global Tool Configuration,就是設定各bin目錄的位置
因為我們是用image,本身裡面沒maven,怎麼辦哵?
可以到docker hub裡搜尋 jenkins+maven
例如:
https://hub.docker.com/search/?isAutomated=0&isOfficial=0&page=1&pullCount=0&q=jenkins+maven&starCount=0
然後參考他們的 Dockerfile
# 找FROM jenkins的會比較簡單
FROM jenkins/jenkins:lts
RUN apt-get update && apt-get install -y maven && \
apt-get install -y build-essential
https://hub.docker.com/r/eggsy84/jenkins-maven-git-docker/~/dockerfile/
# 找FROM ubuntu的,可以學更多指令
FROM ubuntu:18.04
...
ADD ~/.bash_profile /root/.bashrc # 從host複製檔案到container,可以是URL
COPY some-file-on-host some-path-inside-container # 簡單的copy檔案
# ADD跟COPY不知有何差異? 嗯,好問題,推這一篇文章
# http://blog.maxkit.com.tw/2017/02/dockerfile.html
WORKDIR /root # 工作目錄
CMD ["command" "parameters"]
CMD ["bash"] # 要使用的shell
# CMD跟RUN的差異?
# CMD:當docker run,container建立的時候要跑什麼樣的命令。
# CMD、ENTRYPOINT,傻傻分不清楚:也是container建立時要執行的命令,和CMD混搭時CMD會被視為初始參數來使用。
https://hub.docker.com/r/stephenreed/jenkins-java8-maven-git/~/dockerfile/
可到老師的專案
https://github.com/jleetutorial/maven-project
參考
pom.xml
其他的…推 kent's Blog 的 Maven教學
http://kentyeh.github.io/mavenStartup/index.html
Jenkins預設會用jenkins帳號,這個帳號要有相關目錄的權限
例如:/Users/xxx/...
# 在帳號xxx設權限
$ chmod -r 0755 /Users/xxx/Downloads/...
# 設完後切到帳號jenkins,跑看看Downloads裡的mvn -v
$ sudo -iu jenkins
$ ./mvn -v
=============================
先推一篇文章
(透過Jenkins 與MSBuild、MSTest)
https://dotblogs.com.tw/aken1215/2016/10/11/000455
因為小弟會的語言有C#、node.js,所以補充一下怎麼在Jenkins用Dot Net專案
###因為是ASP.NET所以是在Windows環境喔~Linux/Unix的朋友可以跳過了
接下來參考到的是udemy課程
好像是免費的時候取得的,可能現在還是免費吧(課程時數較短,偏簡介)
如果不是因為鐵人賽,大概也沒機會看吧
課程裡的專案是Asp.Net+NUnit,如果以後有其他類型再回來補充
範例專案:
https://github.com/executeautomation/SeleniumNUnitParam
把專案fork到你自己的github,如果上面Jenkins跟GitHub的設定有做完的話
建個新Project
選「Freestyle project」,取名「DotNetFreestyle」
Source Code Management/Git/Repository URL填入 https://github.com/xxxx/SeleniumNUnitParam.git
choco install microsoft-build-tools
裝好後會在C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe
再來裝一下 MSBuild Plugin,再來到Global Tool Configuration就會看到MSBuild
Name:MSBuildLocal(隨便填)
Path to MSBuild: C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe (要改一下實際版本喔)
Save!!
然後DotNetFreestyle這個Project裡的Build Triggers/Build就會有
Build a Visual Studio project or solution using MSBuild
MSBuild Version: MSBuildLocal(隨便填)
MSBuild Build File: SeleniumNUnitParam.sln (那個專案檔)
按Save!!
一樣靠chocolate
choco install nuget.commandline
-裝好後在Build/Add build step/Execute Windows batch command
其實就是靠下command來跑NuGet
由此可知 .Net Core 肯定簡單多了,因為有 dotnet cli 呀,而且可在 Unix/Linux 底下玩
Command:"C:\xxx\nuget.exe" restore SeleniumNUnitParam.sln # 看你的nuget.exe放哪囉
然後把這個指令拉到Build Triggers/Build之前(因為要先restore,再build麻)
確認你有裝 .NET Framework
最後,點「Build Now」,再到 Build 裡面看 Console Output
聰明的朋友現在應該能舉一反三了,沒錯,一樣是用command跑
choco install nunit.install # 這個下載數最高
-裝好後在Build/Add build step/Execute Windows batch command
Command:"C:\xxx\nunit3-console.exe" ...略/bin/Debug/SeleniumNUnitParam.dll
那測試的順序當然放在Build之後啦(才會有dll檔)
先推一篇文章
點部落的[DevOps自動化-6] Jenkins持續整合、發布
https://dotblogs.com.tw/aken1215/2016/10/11/000455
pipeline能幹麻呢?例如 Build -> Test -> Release -> QA+Deploy到測試環境 -> Deploy到Production
就像水管一樣,水從高處往低處流
嗯,如果可以連程式碼都自動產生就好了…
建一個新Project - 選「Pipeline」,取名「DotNetPipeline」
可用Pipeline Syntax/Snippet Generator產生snippet
node # 把整個script包起來
{
stage 'Checkout code' # 執行的時候會有視覺化的方塊
git 'https://github.com/xxx/yyy.git'
stage 'Restore Nuget'
bat 'C:\xxx\nuget.exe restore SeleniumNUnitParam.sln'
# 用單引號包就好了
echo 'hello~ Restore Nuget'
stage 'Build'
bat "\"${tool 'MSBuild'}\" SeleniumNUnitParam.sln
/p:Configuration=Release /p:Platform=\"Any CPU\"
/p:ProductVersion=1.0.0.${env.BUILD_NUMBER}"
stage 'Archive' # 打包
archive 'SeleniumNUnitParam/bin/Release/**'
}